home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-05-11 | 46.9 KB | 3,330 lines |
- Flash:
- ; D0=number of a zone, D1=brightness change
-
- movem.l d0/a0/a1,-(a7)
-
- move.l #ZoneBrightTable,a1
- add.w d1,(a1,d0.w*4)
- add.w d1,2(a1,d0.w*4)
-
- move.l ZoneAdds,a0
- move.l (a0,d0.w*4),a0
- add.l LEVELDATA,a0
- add.l #ToListOfGraph,a0
-
- doemall:
- move.w (a0),d0
- blt.s doneemall
- add.w d1,(a1,d0.w*4)
- add.w d1,2(a1,d0.w*4)
- addq #8,a0
- bra.s doemall
-
- doneemall:
- movem.l (a7)+,d0/a0/a1
-
- rts
-
-
- ExplodeIntoBits:
- move.l NastyShotData,a5
- move.w #19,d1
- .findeight
- move.w 12(a5),d0
- blt.s .gotonehere
- adda.w #64,a5
- dbra d1,.findeight
- rts
-
- .gotonehere
-
- move.l ObjectPoints,a2
- move.w (a5),d3
- lea (a2,d3.w*8),a2
- move.w newx,(a2)
- move.w newz,4(a2)
- jsr GetRand
- and.w #8190,d0
- move.l #SineTable,a2
- adda.w d0,a2
- move.w (a2),d3
- move.w 2048(a2),d4
- Jsr GetRand
- and.w #3,d0
- add.w #1,d0
- ext.l d3
- ext.l d4
- asl.l d0,d3
- asl.l d0,d4
- move.l ImpactX(a0),d0
- swap d4
- asr.w #1,d0
- add.w d0,d4
- swap d0
- move.w d4,shotzvel(a5)
- swap d3
- asr.w #1,d0
- add.w d0,d3
- move.w d3,shotxvel(a5)
- jsr GetRand
- and.w #1023,d0
- add.w #2*128,d0
- neg.w d0
- move.w d0,shotyvel(a5)
- move.l #0,EnemyFlags(a5)
- move.w 12(a0),12(a5)
- move.w 4(a0),d0
- add.w #6,d0
- ext.l d0
- asl.l #7,d0
- move.l d0,accypos(a5)
- move.w d2,d0
- and.w #3,d0
- add.w #50,d0
- move.b d0,shotsize(a5)
- move.w #40,shotgrav(a5)
- move.w #0,shotflags(a5)
- move.w #-1,shotlife(a5)
- clr.b shotstatus(a5)
- move.b ObjInTop(a0),ObjInTop(a5)
- st worry(a0)
- adda.w #64,a5
- sub.w #1,d2
- blt.s .gotemall
- dbra d1,.findeight
-
- .gotemall
-
- rts
-
- brightanim:
-
- move.l #BrightAnimTable,a1
- move.l #BrightAnimPtrs,a3
- move.l #BrightAnimStarts,a4
- dobrightanims
- move.l (a3),d0
- blt nomoreanims
- move.l d0,a2
- move.w (a2)+,d0
- cmp.w #999,d0
- bne.s itsabright
- move.l (a4),a2
- move.w (a2)+,d0
- itsabright:
- move.l a2,(a3)+
- addq #4,a4
- move.w d0,(a1)+
- bra.s dobrightanims
-
- nomoreanims:
- rts
-
- BrightAnimTable: ds.w 20
- BrightAnimPtrs:
- dc.l PulseANIM
- dc.l FlickerANIM
- dc.l FireFlickerANIM
- dc.l -1
-
- BrightAnimStarts:
- dc.l PulseANIM
- dc.l FlickerANIM
- dc.l FireFlickerANIM
-
- PulseANIM:
- dc.w -10,-10,-9,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10
- dc.w 10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9
- dc.w 999
-
- FlickerANIM:
- dcb.w 20,10
- dc.w -10
- dcb.w 30,10
- dc.w -10
- dcb.w 5,10
- dc.w -10
- dc.w 999
-
- FireFlickerANIM:
- dc.w -10,-9,-6,-10,-6,-5,-5,-7,-5,-10,-9,-8,-7,-5,-5,-5,-5
- dc.w -5,-5,-5,-5,-6,-7,-8,-9,-5,-10,-9,-10,-6,-5,-5,-5,-5,-5
- dc.w -5,-5
- dc.w 999
-
- realtab:
- dc.l prot1-78935450
- dc.l prot2-78935450
- dc.l prot3-78935450
- dc.l prot4-78935450
- dc.l prot5-78935450
- dc.l prot6-78935450
- dc.l prot7-78935450
- dc.l prot8-78935450
- dc.l prot9-78935450
- dc.l protA-78935450
-
- objvels: ds.l 8
-
- Robotanimpos:
- dc.w 0
- Robotarmpos
- dc.w 0
- clump: dc.w 0
-
- RobotWalk:
- move.l #RobotPts+2,a0
- move.l #Robotanim,a1
- move.w Robotanimpos(pc),d0
-
- clr.b clump
- adda.w d0,a1
-
- move.w #(38*3)-1,d0
- putinpts:
- move.w (a1)+,(a0)+
- dbra d0,putinpts
-
-
- move.l #RightArm,a0
- move.l #Armanim,a1
- move.w Robotarmpos(pc),d0
- adda.w d0,a1
- move.w #(14*3)-1,d0
- putinpts2:
- move.w (a1)+,(a0)+
- dbra d0,putinpts2
-
- move.l #Robot_MainBody,a0
- move.l #BodyPlace+2,a1
- move.w (a0)+,d0
- move.w RobotPts+4+14*6,d1
- add.w RobotPts+4+22*6,d1
- asr.w #1,d1
-
- putinheights:
- move.w (a0)+,d2
- add.w d1,d2
- move.w d2,(a1)
- addq #6,a1
- dbra d0,putinheights
-
- move.w visxpos,d0
- add.w visxdir,d0
- cmp.w #24,d0
- blt.s okvisr
- move.w #-4,visxdir
- okvisr
- cmp.w #-24,d0
- bgt.s okvisl
- move.w #4,visxdir
- okvisl:
- move.w d0,visxpos
-
- move.l #VISOR,a0
- add.w #64,d0
- move.b d0,6(a0)
- move.b d0,18(a0)
- move.b d0,22(a0)
- add.b #63,d0
- move.b d0,10(a0)
- move.b d0,14(a0)
-
- rts
-
- visxpos: dc.w 0
- visxdir: dc.w 4
-
- FramesToDraw: dc.w 0
- TempFrames: dc.w 0
-
- objmoveanim:
-
- move.l PLR1_Roompt,a0
- move.w (a0),PLR1_Zone
- move.l PLR2_Roompt,a0
- move.w (a0),PLR2_Zone
-
- bsr Player1Shot
- bsr Player2Shot
- bsr SwitchRoutine
- bsr DoorRoutine
- bsr LiftRoutine
- bsr ObjectHandler
- bsr RobotWalk
- bsr brightanim
-
- subq.w #1,animtimer
- bgt.s notzero
- move.w #2,animtimer
- move.l otherrip,d0
- move.l RipTear,otherrip
- move.l d0,RipTear
- notzero:
-
- rts
-
- ******************************
-
- tstdir: dc.w 0
-
- liftheighttab: ds.w 40
- doorheighttab: ds.w 40
- PLR1_stoodonlift: dc.b 0
- PLR2_stoodonlift: dc.b 0
- liftattop: dc.b 0
- liftatbot: dc.b 0
- ZoneBrightTable:
- ds.l 300
-
- even
- LiftRoutine:
-
- move.l LiftData,a0
- move.l #liftheighttab,a6
-
- doalift:
-
- move.w (a0)+,d0 ; bottom of lift movement
- cmp.w #999,d0
- bne notallliftsdone
- move.w #999,(a6)
- rts
- notallliftsdone:
- move.w (a0)+,d1 ; top of lift movement.
-
- move.w (a0),d3
- move.w d3,(a6)+
- move.w 2(a0),d2
- move.w d2,d7
- muls TempFrames,d2
- add.w d2,d3
- move.w 2(a0),d2
- cmp.w d3,d0
- sle.s liftatbot
- bgt.s .nolower
- moveq #0,d2
- move.w d0,d3
- .nolower:
-
- cmp.w d3,d1
- sge.s liftattop
- blt.s .noraise
- moveq #0,d2
- move.w d1,d3
- .noraise:
-
- sub.w d3,d0
- cmp.w #15*16,d0
- slt d6
-
- move.w d3,(a0)+
- move.l a0,a5
- move.w d2,(a0)+
- move.w d2,d7
-
- move.l (a0)+,a1
- add.l LEVELGRAPHICS,a1
- asr.w #2,d3
- move.w d3,d0
- asl.w #2,d0
- move.w d0,2(a1)
- move.w d3,d0
- muls #256,d3
- move.w (a0)+,d5
- move.l ZoneAdds,a1
- move.l (a1,d5.w*4),a1
- add.l LEVELDATA,a1
- move.w (a1),d5
- move.l PLR1_Roompt,a3
- move.l d3,2(a1)
- neg.w d0
-
- cmp.w (a3),d5
- seq.s PLR1_stoodonlift
- move.l PLR2_Roompt,a3
- cmp.w (a3),d5
- seq.s PLR2_stoodonlift
-
- move.w (a0)+,d2 ; conditions
- and.w Conditions,d2
- cmp.w -2(a0),d2
- beq.s .satisfied
-
- move.w (a0)+,d5
-
- .dothesimplething:
- move.l FloorLines,a3
- .simplecheck:
- move.w (a0)+,d5
- blt nomoreliftwalls
- asl.w #4,d5
- lea (a3,d5.w),a4
- move.w #0,14(a4)
- move.l (a0)+,a1
- add.l LEVELGRAPHICS,a1
- move.l (a0)+,a2
- adda.w d0,a2
- move.l a2,10(a1)
- move.l d3,20(a1)
- bra.s .simplecheck
- bra nomoreliftwalls
-
- .satisfied:
-
- move.l FloorLines,a3
- moveq #0,d4
- moveq #0,d5
- move.b (a0)+,d4
- move.b (a0)+,d5
- tst.b liftattop
- bne tstliftlower
- tst.b liftatbot
- bne tstliftraise
- move.w #0,d1
-
- backfromlift
-
- and.w #255,d0
-
- liftwalls:
- move.w (a0)+,d5
- blt nomoreliftwalls
-
- asl.w #4,d5
- lea (a3,d5.w),a4
- move.w 14(a4),d4
- move.w #$8000,14(a4)
- and.w d1,d4
- beq.s .nothinghit
- move.w d7,(a5)
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #50,Noisevol
- move.w #5,Samplenum
- move.b #1,chanpick
- st notifplaying
- move.b #$fe,IDNUM
- movem.l a0/a3/a4/d0/d1/d2/d3/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a3/a4/d0/d1/d2/d3/d6/d7
- .nothinghit:
- move.l (a0)+,a1
- add.l LEVELGRAPHICS,a1
- move.l (a0)+,a2
- adda.w d0,a2
- move.l a2,10(a1)
- move.l d3,20(a1)
- bra liftwalls
-
- nomoreliftwalls
- bra doalift
-
- rts
-
- tstliftlower:
- cmp.b #1,d5
- blt.s lift0
- beq.s lift1
- cmp.b #3,d5
- blt.s lift2
- beq.s lift3
-
- lift0:
-
- moveq #0,d1
- tst.b p1_spctap
- beq.s .noplr1
- move.w #%100000000,d1
- move.w #4,d7
- tst.b PLR1_stoodonlift
- beq.s .noplr1
- move.w #$8000,d1
- bra backfromlift
-
- .noplr1:
- tst.b p2_spctap
- beq.s .noplr2
- or.w #%100000000000,d1
- move.w #4,d7
- tst.b PLR2_stoodonlift
- beq.s .noplr2
- move.w #$8000,d1
- bra backfromlift
-
- .noplr2:
- bra backfromlift
-
- lift1:
- move.w #4,d7
- tst.b PLR1_stoodonlift
- bne.s lift1b
- tst.b PLR2_stoodonlift
- bne.s lift1b
- move.w #%100100000000,d1
- bra backfromlift
- lift1b:
- move.w #$8000,d1
- bra backfromlift
-
- lift2:
- move.w #$8000,d1
- move.w #4,d7
- bra backfromlift
-
- lift3:
- move.w #$0,d1
- bra backfromlift
-
- tstliftraise:
- cmp.b #1,d4
- blt.s rlift0
- beq.s rlift1
- cmp.b #3,d4
- blt.s rlift2
- beq.s rlift3
-
- rlift0:
-
- moveq #0,d1
- tst.b p1_spctap
- beq.s .noplr1
- move.w #%100000000,d1
- move.w #-4,d7
- tst.b PLR1_stoodonlift
- beq.s .noplr1
- move.w #$8000,d1
- bra backfromlift
-
- .noplr1:
- tst.b p2_spctap
- beq.s .noplr2
- or.w #%100000000000,d1
- move.w #-4,d7
- tst.b PLR2_stoodonlift
- beq.s .noplr2
- move.w #$8000,d1
- bra backfromlift
-
- .noplr2:
-
- bra backfromlift
-
- rlift1:
- move.w #-4,d7
- tst.b PLR1_stoodonlift
- bne.s rlift1b
- tst.b PLR2_stoodonlift
- bne.s rlift1b
- move.w #%100100000000,d1
- bra backfromlift
- rlift1b:
- move.w #$8000,d1
- bra backfromlift
-
- rlift2:
- move.w #$8000,d1
- move.w #-4,d7
- bra backfromlift
-
- rlift3:
- move.w #$0,d1
- bra backfromlift
-
-
- animtimer: dc.w 2
-
-
- doordir: dc.w -1
- doorpos: dc.w -9
- dooropen: dc.b 0
- doorclosed: dc.b 0
-
- even
- DoorRoutine:
-
- move.l #doorheighttab,a6
- move.l DoorData,a0
-
- doadoor:
-
- move.w (a0)+,d0 ; bottom of door movement
- cmp.w #999,d0
- bne notalldoorsdone
- move.w #999,(a6)+
- rts
- notalldoorsdone:
- move.w (a0)+,d1 ; top of door movement.
-
- move.w (a0),d3
- move.w d3,(a6)+
- move.w 2(a0),d2
- muls TempFrames,d2
- add.w d2,d3
- move.w 2(a0),d2
- cmp.w d3,d0
- sle.s doorclosed
- bgt.s nolower
- moveq #0,d2
- nolower:
-
- cmp.w d3,d1
- sge.s dooropen
- blt.s noraise
- moveq #0,d2
- move.w d1,d3
- noraise:
-
- sub.w d3,d0
- cmp.w #15*16,d0
- sge d6
-
- move.w d3,(a0)+
- move.l a0,a5
- move.w d2,(a0)+
- move.w d2,d7
-
- move.l (a0)+,a1
- add.l LEVELGRAPHICS,a1
- asr.w #2,d3
- move.w d3,d0
- asl.w #2,d0
- move.w d0,2(a1)
- move.w d3,d0
- muls #256,d3
- move.l ZoneAdds,a1
- move.w (a0)+,d5
-
-
- move.l (a1,d5.w*4),a1
- add.l LEVELDATA,a1
- move.l d3,6(a1)
- neg.w d0
- and.w #255,d0
- ; add.w #64,d0
-
- cmp.w PLR1_Zone,d5
- bne.s NotGoBackUp
- tst.b dooropen
- bne.s NotGoBackUp
- tst.w d2
- blt.s NotGoBackUp
- move.w #-16,d7
- move.w #$8000,d1
- move.w (a0)+,d2
- move.w (a0)+,d5
- bra backfromtst
- NotGoBackUp:
-
- move.w (a0)+,d2 ; conditions
- and.w Conditions,d2
-
- cmp.w -2(a0),d2
- beq.s satisfied
-
- move.w (a0)+,d5
-
- dothesimplething:
- move.l FloorLines,a3
- simplecheck:
- move.w (a0)+,d5
- blt nomoredoorwalls
- asl.w #4,d5
- lea (a3,d5.w),a4
- move.w #0,14(a4)
- move.l (a0)+,a1
- add.l LEVELGRAPHICS,a1
- move.l (a0)+,a2
- adda.w d0,a2
- move.l a2,10(a1)
- move.l d3,24(a1)
- bra.s simplecheck
- bra nomoredoorwalls
-
-
- satisfied:
-
- moveq #0,d4
- moveq #0,d5
- move.b (a0)+,d5
- move.b (a0)+,d4
- tst.b dooropen
- bne tstdoortoclose
- tst.b doorclosed
- bne tstdoortoopen
- move.w #$0,d1
-
- backfromtst:
-
- move.l FloorLines,a3
-
- doorwalls:
- move.w (a0)+,d5
- blt.s nomoredoorwalls
- asl.w #4,d5
- lea (a3,d5.w),a4
- move.w 14(a4),d4
- move.w #$8000,14(a4)
- and.w d1,d4
- beq.s nothinghit
- move.w d7,(a5)
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #50,Noisevol
- move.w #5,Samplenum
- move.b #1,chanpick
- clr.b notifplaying
- move.b #$fd,IDNUM
- movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
- nothinghit:
- move.l (a0)+,a1
- add.l LEVELGRAPHICS,a1
- move.l (a0)+,a2
- adda.w d0,a2
- move.l a2,10(a1)
- move.l d3,24(a1)
- bra.s doorwalls
-
- nomoredoorwalls
- bra doadoor
-
- rts
-
- tstdoortoopen:
- cmp.w #1,d5
- blt.s door0
- beq.s door1
- cmp.w #3,d5
- blt.s door2
- beq.s door3
- cmp.w #5,d5
- blt.s door4
- beq.s door5
-
- door0:
-
- move.w #$0,d1
- tst.b p1_spctap
- beq.s .noplr1
- move.w #%100000000,d1
- .noplr1:
- tst.b p2_spctap
- beq.s .noplr2
- or.w #%100000000000,d1
- .noplr2:
- move.w #-16,d7
- bra backfromtst
-
- door1:
- move.w #%100100000000,d1
- move.w #-16,d7
- bra backfromtst
-
- door2:
- move.w #%10000000000,d1
- move.w #-16,d7
- bra backfromtst
-
- door3:
- move.w #%1000000000,d1
- move.w #-16,d7
- bra backfromtst
-
- door4:
- move.w #$8000,d1
- move.w #-16,d7
- bra backfromtst
-
- door5:
- move.w #$0,d1
- bra backfromtst
-
- tstdoortoclose:
- tst.w d4
- beq.s dclose0
- bra.s dclose1
-
- dclose0:
- move.w #4,d7
- move.w #$8000,d1
- bra backfromtst
-
- dclose1:
- move.w #$0,d1
- bra backfromtst
-
- SwitchRoutine:
- tst.b p1_spctap
- bne.s SpaceIsPressed
- rts
- SpaceIsPressed:
- move.l SwitchData,a0
- move.w #7,d0
- move.l Points,a1
- move.w PLR1_xoff,d1
- move.w PLR1_zoff,d2
- CheckSwitches:
- move.w (a0),d3
- blt NotCloseEnough
- move.w 2(a0),d3
- lea (a1,d3.w*4),a2
- move.w (a2),d3
- add.w 4(a2),d3
- asr.w #1,d3
- move.w 2(a2),d4
- add.w 6(a2),d4
- asr.w #1,d4
- sub.w d1,d3
- muls d3,d3
- sub.w d2,d4
- muls d4,d4
- add.l d3,d4
- cmp.l #60*60,d4
- bge NotCloseEnough
- move.l 4(a0),a3
- add.l LEVELGRAPHICS,a3
- move.w 2(a3),d3
- and.w #%1111000000111111,d3
- not.b 8(a0)
- beq.s switchoff
- or.w #32*64,d3
- switchoff:
- move.w d3,2(a3)
- move.w #7,d3
- sub.w d0,d3
- addq #4,d3
- move.w Conditions,d4
- bchg d3,d4
- move.w d4,Conditions
- movem.l a0/a1/d0,-(a7)
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #50,Noisevol
- move.w #10,Samplenum
- move.b #1,chanpick
- st notifplaying
- move.b #$fc,IDNUM
- movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
-
- movem.l (a7)+,a0/a1/d0
-
- NotCloseEnough:
- adda.w #12,a0
- dbra d0,CheckSwitches
- rts
-
- prot1: dc.w 0
-
- tempGotBigGun: dc.w 0
- tempGunDamage: dc.w 0
- tempGunNoise: dc.w 1
- tempxoff: dc.w 0
- tempzoff: dc.w 0
- tempRoompt: dc.l 0
-
- PLR1_GotBigGun: dc.w 0
- PLR1_GunDamage: dc.w 0
- PLR1_GunNoise: dc.w 0
- PLR2_GotBigGun: dc.w 0
- PLR2_GunDamage: dc.w 0
- PLR2_GunNoise: dc.w 0
- bulyspd: dc.w 0
- closedist: dc.w 0
-
- PLR1_ObsInLine:
- ds.b 400
- PLR2_ObsInLine:
- ds.b 400
-
- rotcount:
- dc.w 0
-
- shotvels: ds.l 20
-
- PLR1_clicked: dc.b 0
- PLR2_clicked: dc.b 0
- popping: ds.l 5*4
- targetydiff: dc.l 0
- PLR1_TimeToShoot: dc.w 0
- PLR2_TimeToShoot: dc.w 0
-
- Player1Shot:
-
- tst.w PLR1_TimeToShoot
- beq.s okcanfire
-
- move.w TempFrames,d0
- sub.w d0,PLR1_TimeToShoot
- bge PLR1_nofire
- move.w #0,PLR1_TimeToShoot
- bra PLR1_nofire
-
- okcanfire:
-
-
- lea PLR1_GunData,a6
- moveq #0,d0
- move.b p1_gunselected,d0
- move.b d0,tempgun
- lsl.w #2,d0
- lea (a6,d0.w*8),a6
- move.w 14(a6),BulletSpd
-
- tst.w 12(a6)
- beq.s .itsaclick
-
- tst.b p1_fire
- beq PLR1_nofire
- bra .itsahold
-
- .itsaclick:
- tst.b p1_clicked
- beq PLR1_nofire
-
- .itsahold:
-
- move.w PLR1_angpos,d0
- move.l #SineTable,a0
- lea (a0,d0.w),a0
- move.w (a0),tempxdir
- move.w 2048(a0),tempzdir
- move.w PLR1_xoff,tempxoff
- move.w PLR1_zoff,tempzoff
- move.l PLR1_yoff,tempyoff
- move.b PLR1_StoodInTop,tempStoodInTop
- move.l PLR1_Roompt,tempRoompt
- move.l #%110111000001,d7
- move.w #-1,d0
- move.l #0,targetydiff
- move.l #$7fff,d1
-
- move.l ZoneAdds,a3
-
- move.l #PLR1_ObsInLine,a1
- move.l ObjectData,a0
- move.l #PLR1_ObjDists,a2
- findclosestinline
- tst.w (a0)
- blt outofline
- tst.b (a1)+
- beq.s notlinedup
- btst #0,17(a0)
- beq.s notlinedup
- tst.w 12(a0)
- blt.s notlinedup
- move.b 16(a0),d6
- btst d6,d7
- beq.s notlinedup
- tst.b numlives(a0)
- beq.s notlinedup
- move.w (a0),d5
- move.w (a2,d5.w*2),d6
- move.w 4(a0),d2
- ext.l d2
- asl.l #7,d2
- sub.l PLR1_yoff,d2
- move.l d2,d3
- bge.s .oknotneg
- neg.l d2
- .oknotneg:
- divs #40,d2
- cmp.w d6,d2
- bgt.s notlinedup
-
- cmp.w d6,d1
- blt.s notlinedup
- move.w d6,d1
-
- ; We have a closer enemy lined up.
- move.l d3,targetydiff
- move.w d5,d0
-
- notlinedup:
- add.w #64,a0
- bra findclosestinline
-
- outofline:
-
- move.w #0,bulyspd
- tst.w d0
- blt nothingtoshoot
-
- move.l targetydiff,d5
- sub.l PLR1_height,d5
- add.l #18*256,d5
- move.w d1,closedist
- move.w BulletSpd,d2
- asr.w d2,d1
- tst.w d1
- bgt.s okdistthing
- moveq #1,d1
- okdistthing
- divs d1,d5
- move.w d5,bulyspd
-
- tst.b 5(a6)
- beq pressedfire
-
- move.w (a6),d2
- moveq #0,d1
- move.b 2(a6),d1
- cmp.w d1,d2
- bge.s .okcanshoot
-
- move.l PLR1_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.b #12,Samplenum+1
- clr.b notifplaying
- move.b #$fb,IDNUM
- jsr MakeSomeNoise
-
- rts
-
- .okcanshoot:
-
- move.w 8(a6),PLR1_TimeToShoot
-
- move.b #2,PLR1_GunFrame
- sub.w d1,d2
- move.w d2,(a6)
-
- ; Just blow it up.
-
- move.l PlayerShotData,a0
- move.w #19,d1
- .findonefree
- move.w 12(a0),d2
- blt.s .foundonefree
- adda.w #64,a0
- dbra d1,.findonefree
-
- rts
-
- .foundonefree:
-
- move.l ObjectPoints,a1
- move.w (a0),d2
- move.l (a1,d0.w*8),(a1,d2.w*8)
- move.l 4(a1,d0.w*8),4(a1,d2.w*8)
- move.b #1,shotstatus(a0)
- move.w #0,shotgrav(a0)
- move.b p1_gunselected,shotsize(a0)
- move.b #0,shotanim(a0)
-
- move.l ObjectData,a1
- asl.w #6,d0
- adda.w d0,a1
- move.w 4(a1),d1
- ext.l d1
- asl.l #7,d1
- move.l d1,accypos(a0)
- move.w 12(a1),12(a0)
- st worry(a0)
- move.w 4(a1),4(a0)
-
- move.b 6(a6),d0
- add.b d0,damagetaken(a1)
-
- move.l PLR1_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.b 3(a6),Samplenum+1
- move.b #2,chanpick
- clr.b notifplaying
- movem.l a0/d5/d6/d7,-(a7)
- move.b #$fb,IDNUM
- jsr MakeSomeNoise
- movem.l (a7)+,a0/d5/d6/d7
- rts
-
- nothingtoshoot:
-
- tst.b 5(a6)
- beq pressedfire
-
- move.w (a6),d0
- moveq #0,d1
- move.b 2(a6),d1
- cmp.w d1,d0
- bge.s .okcanshoot
-
- move.l PLR1_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.b #12,Samplenum+1
- clr.b notifplaying
- move.b #$fb,IDNUM
- jsr MakeSomeNoise
-
- rts
-
- .okcanshoot:
- move.w 8(a6),PLR1_TimeToShoot
- sub.w d1,d0
- move.w d0,(a6)
- move.b #2,PLR1_GunFrame
-
- move.l PLR1_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.b 3(a6),Samplenum+1
- move.b #2,chanpick
- clr.b notifplaying
- movem.l a0/d5/d6/d7,-(a7)
- move.b #$fb,IDNUM
- jsr MakeSomeNoise
- movem.l (a7)+,a0/d5/d6/d7
- rts
-
- PLR1_nofire:
-
- rts
-
- BulletSpd: dc.w 0
-
- *******************************************************
-
- Player2Shot:
-
- tst.w PLR2_TimeToShoot
- beq.s okcanfire2
-
- move.w TempFrames,d0
- sub.w d0,PLR2_TimeToShoot
- bge PLR2_nofire
- move.w #0,PLR2_TimeToShoot
- bra PLR2_nofire
-
- okcanfire2:
-
- lea PLR2_GunData,a6
- moveq #0,d0
- move.b p2_gunselected,d0
- move.b d0,tempgun
- lsl.w #2,d0
- lea (a6,d0.w*8),a6
- move.w 14(a6),BulletSpd
-
- tst.w 12(a6)
- beq.s .itsaclick
-
- tst.b p2_fire
- beq PLR2_nofire
- bra .itsahold
-
- .itsaclick:
- tst.b p2_clicked
- beq PLR2_nofire
-
- .itsahold:
-
- move.w PLR2_angpos,d0
- move.l #SineTable,a0
- lea (a0,d0.w),a0
- move.w (a0),tempxdir
- move.w 2048(a0),tempzdir
- move.w PLR2_xoff,tempxoff
- move.w PLR2_zoff,tempzoff
- move.l PLR2_yoff,tempyoff
- move.b PLR2_StoodInTop,tempStoodInTop
- move.l PLR2_Roompt,tempRoompt
- move.l #%010111100001,d7
- move.w #-1,d0
- move.l #0,targetydiff
- move.l #$7fff,d1
-
- move.l ZoneAdds,a3
-
- move.l #PLR2_ObsInLine,a1
- move.l ObjectData,a0
- move.l #PLR2_ObjDists,a2
- findclosestinline2
- tst.w (a0)
- blt outofline2
- tst.b (a1)+
- beq.s notlinedup2
- btst #1,17(a0)
- beq.s notlinedup2
- tst.w 12(a0)
- blt.s notlinedup2
- move.b 16(a0),d6
- btst d6,d7
- beq.s notlinedup2
- tst.b numlives(a0)
- beq.s notlinedup2
- move.w (a0),d5
- move.w (a2,d5.w*2),d6
- move.w 4(a0),d2
- ext.l d2
- asl.l #7,d2
- sub.l PLR2_yoff,d2
- move.l d2,d3
- bge.s .oknotneg
- neg.l d2
- .oknotneg:
- divs #40,d2
- cmp.w d6,d2
- bgt.s notlinedup2
-
- cmp.w d6,d1
- blt.s notlinedup2
- move.w d6,d1
-
- ; We have a closer enemy lined up.
- move.l d3,targetydiff
- move.w d5,d0
-
- notlinedup2:
- add.w #64,a0
- bra findclosestinline2
-
- outofline2:
-
- move.w #0,bulyspd
- tst.w d0
- blt nothingtoshoot2
-
- move.l targetydiff,d5
- sub.l PLR2_height,d5
- add.l #18*256,d5
- move.w d1,closedist
-
- move.w BulletSpd,d2
- asr.w d2,d1
- tst.w d1
- bgt.s okdistthing2
- moveq #1,d1
- okdistthing2
- divs d1,d5
- move.w d5,bulyspd
-
- tst.b 5(a6)
- beq pressedfire2
-
- move.w (a6),d2
- moveq #0,d1
- move.b 2(a6),d1
- cmp.w d1,d2
- bge.s .okcanshoot
-
- move.l PLR2_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.b #12,Samplenum+1
- clr.b notifplaying
- move.b #$fb,IDNUM
- jsr MakeSomeNoise
-
- rts
-
- .okcanshoot:
-
- move.w 8(a6),PLR2_TimeToShoot
-
- move.b #2,PLR2_GunFrame
- sub.w d1,d2
- move.w d2,(a6)
-
- ; Just blow it up.
-
- move.l PlayerShotData,a0
- move.w #19,d1
- .findonefree
- move.w 12(a0),d2
- blt.s .foundonefree
- adda.w #64,a0
- dbra d1,.findonefree
-
- rts
-
- .foundonefree:
-
- move.l ObjectPoints,a1
- move.w (a0),d2
- move.l (a1,d0.w*8),(a1,d2.w*8)
- move.l 4(a1,d0.w*8),4(a1,d2.w*8)
- move.b #1,shotstatus(a0)
- move.w #0,shotgrav(a0)
- move.b p2_gunselected,shotsize(a0)
- move.b #0,shotanim(a0)
-
- move.l ObjectData,a1
- asl.w #6,d0
- adda.w d0,a1
- move.w 4(a1),d1
- ext.l d1
- asl.l #7,d1
- move.l d1,accypos(a0)
- move.w 12(a1),12(a0)
- st worry(a0)
- move.w 4(a1),4(a0)
-
- move.b 6(a6),d0
- add.b d0,damagetaken(a1)
-
- move.l PLR2_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.b 3(a6),Samplenum+1
- move.b #2,chanpick
- clr.b notifplaying
- movem.l a0/d5/d6/d7,-(a7)
- move.b #$fb,IDNUM
- jsr MakeSomeNoise
- movem.l (a7)+,a0/d5/d6/d7
- rts
-
- nothingtoshoot2:
-
- tst.b 5(a6)
- beq pressedfire2
-
- move.w (a6),d0
- moveq #0,d1
- move.b 2(a6),d1
- cmp.w d1,d0
- bge.s .okcanshoot
-
- move.l PLR2_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.b #12,Samplenum+1
- clr.b notifplaying
- move.b #$fb,IDNUM
- jsr MakeSomeNoise
-
- rts
-
- .okcanshoot:
- move.w 8(a6),PLR2_TimeToShoot
- sub.w d1,d0
- move.w d0,(a6)
- move.b #2,PLR2_GunFrame
-
- move.l PLR2_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.b 3(a6),Samplenum+1
- move.b #2,chanpick
- clr.b notifplaying
- movem.l a0/d5/d6/d7,-(a7)
- move.b #$fb,IDNUM
- jsr MakeSomeNoise
- movem.l (a7)+,a0/d5/d6/d7
- rts
-
- PLR2_nofire:
-
-
- rts
-
- tempyoff: dc.l 0
- tempStoodInTop: dc.w 0
- tempangpos: dc.w 0
- tempxdir: dc.w 0
- tempzdir: dc.w 0
- tempgun: dc.w 0
- tstfire: dc.w 0
- pressedfire:
-
- move.w #256,d6
- move.w #256,d5
-
- move.w (a6),d0
- moveq #0,d1
- move.b 2(a6),d1
- cmp.w d1,d0
- bge.s okcanshoot
-
- move.l PLR1_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.b #12,Samplenum+1
- clr.b notifplaying
- move.b #$fb,IDNUM
- jsr MakeSomeNoise
-
- rts
-
- okcanshoot:
- move.w 8(a6),PLR1_TimeToShoot
- sub.w d1,d0
- move.w d0,(a6)
- move.b #2,PLR1_GunFrame
- move.l PLR1_Obj,a2
- bra firefive
-
- pressedfire2:
-
- move.w #256,d6
- move.w #256,d5
-
- move.w (a6),d0
- moveq #0,d1
- move.b 2(a6),d1
- cmp.w d1,d0
- bge.s okcanshoot2
-
- move.l PLR2_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.b #12,Samplenum+1
- clr.b notifplaying
- move.b #$fb,IDNUM
- jsr MakeSomeNoise
-
- rts
-
- okcanshoot2:
- move.w 8(a6),PLR2_TimeToShoot
- sub.w d1,d0
- move.w d0,(a6)
- move.b #2,PLR2_GunFrame
- move.l PLR2_Obj,a2
-
- firefive:
-
- move.l PlayerShotData,a0
- move.w #19,d1
- .findonefree
- move.w 12(a0),d0
- blt.s .foundonefree
- adda.w #64,a0
- dbra d1,.findonefree
-
- rts
-
- .foundonefree:
-
- move.w 16(a6),shotgrav(a0)
- move.w 18(a6),shotflags(a0)
- move.w 20(a6),d0
- add.w d0,bulyspd
-
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.b 3(a6),Samplenum+1
- move.b #2,chanpick
- clr.b notifplaying
- move.b tempgun,shotsize(a0)
- move.b 6(a6),shotpower(a0)
- movem.l a0/d5/d6/d7,-(a7)
- move.b #$fb,IDNUM
- jsr MakeSomeNoise
- movem.l (a7)+,a0/d5/d6/d7
-
- move.l ObjectPoints,a1
- move.w (a0),d1
- lea (a1,d1.w*8),a1
- move.w tempxoff,(a1)
- move.w tempzoff,4(a1)
- move.w tempxdir,d0
- ext.l d0
-
- move.w BulletSpd,d1
- asl.l d1,d0
- move.l d0,shotxvel(a0)
- move.w tempzdir,d0
- ext.l d0
- asl.l d1,d0
- move.l d0,shotzvel(a0)
- move.w bulyspd,shotyvel(a0)
- move.b tempStoodInTop,ObjInTop(a0)
- move.w #0,shotlife(a0)
- move.l d7,EnemyFlags(a0)
- move.l tempRoompt,a2
- move.w (a2),12(a0)
- move.l tempyoff,d0
- add.l #20*128,d0
- move.l d0,accypos(a0)
- st worry(a0)
- asr.l #7,d0
- move.w d0,4(a0)
-
- add.w d6,tempangpos
- neg.w d6
- neg.w d5
- add.w d5,d6
-
- rts
-
- PLR1_GunFrame: dc.w 0
- PLR2_GunFrame: dc.w 0
-
- duh: dc.w 0
- double: dc.w 0
- ivescreamed: dc.w 0
-
- ObjectHandler:
-
- move.l ObjectData,a0
- Objectloop:
- tst.w (a0)
- blt doneallobj
- tst.b worry(a0)
- beq.s dontworryyourprettyhead
-
- cmp.b #0,16(a0)
- bne.s notnasty
- bsr ItsANasty
- notnasty:
- cmp.b #1,16(a0)
- bne.s notmedi
- bsr ItsAMediKit
- notmedi:
- cmp.b #2,16(a0)
- bne.s notbullet
- bsr ItsABullet
- notbullet:
- cmp.b #3,16(a0)
- bne.s notbiggun
- bsr ItsABigGun
- notbiggun:
- cmp.b #4,16(a0)
- bne.s notkey
- bsr ItsAKey
- notkey:
-
- ; FIVE IS PLAYER 1
-
- cmp.b #6,16(a0)
- bne.s notRobot
- bsr ItsARobot
- notRobot:
- cmp.b #7,16(a0)
- bne.s notBigNasty
- bsr ItsABigNasty
- notBigNasty:
- cmp.b #8,16(a0)
- bne.s notFlyingNasty
- bsr ItsAFlyingNasty
- notFlyingNasty:
- cmp.b #9,16(a0)
- bne.s notAmmoClip
- bsr ItsAnAmmoClip
- notAmmoClip
- cmp.b #10,16(a0)
- bne.s notBarrel
- bsr ItsABarrel
- notBarrel
-
- ; ELEVEN IS PLAYER 2
-
- dontworryyourprettyhead:
- adda.w #64,a0
- bra Objectloop
-
- doneallobj:
- rts
-
- include "ab3:source/AI.s"
-
- ItsABarrel:
-
- clr.b worry(a0)
-
- cmp.w #8,8(a0)
- bne.s notexploding
-
- add.w #$404,6(a0)
-
- move.w 10(a0),d0
- add.w #1,d0
- cmp.w #12+8,d0
- bne.s .notdone
-
- move.w #-1,12(a0)
- rts
-
- .notdone:
- move.w d0,10(a0)
- rts
-
- notexploding:
-
- move.w 12(a0),d0
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
- move.l ToZoneFloor(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbot
- move.l ToUpperFloor(a1),d0
- .okinbot:
- asr.l #7,d0
- sub.w #32,d0
- move.w d0,4(a0)
-
- moveq #0,d2
- move.b damagetaken(a0),d2
- beq.s nodamage
- move.b #0,damagetaken(a0)
- sub.b d2,numlives(a0)
- bgt.s nodamage
- move.b #0,numlives(a0)
-
- movem.l d0-d7/a0-a6,-(a7)
-
- move.w (a0),d0
- move.l ObjectPoints,a1
- move.w (a1,d0.w*8),Viewerx
- move.w 4(a1,d0.w*8),Viewerz
- move.w #200,d0
- jsr ComputeBlast
-
- move.w (a0),d0
- move.l #ObjRotated,a1
- move.l (a1,d0.w*8),Noisex
- move.w #300,Noisevol
- move.w #15,Samplenum
- jsr MakeSomeNoise
-
- movem.l (a7)+,d0-d7/a0-a6
- move.w #8,8(a0)
- move.w #8,10(a0)
- move.w #$1010,14(a0)
- move.w #-30,2(a0)
-
- rts
-
- nodamage:
-
- move.w (a0),d0
- move.l ObjectPoints,a1
- move.w (a1,d0.w*8),Viewerx
- move.w 4(a1,d0.w*8),Viewerz
- move.b ObjInTop(a0),ViewerTop
- move.b PLR1_StoodInTop,TargetTop
- move.l PLR1_Roompt,ToRoom
-
- move.w 12(a0),d0
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
- move.l a1,FromRoom
-
- move.w PLR1_xoff,Targetx
- move.w PLR1_zoff,Targetz
- move.l PLR1_yoff,d0
- asr.l #7,d0
- move.w d0,Targety
- move.w 4(a0),Viewery
- jsr CanItBeSeen
-
- clr.b 17(a0)
- tst.b CanSee
- beq .noseeplr1
- move.b #1,17(a0)
-
- .noseeplr1:
-
- rts
-
- ItsAMarine:
-
- move.w #15,Aggression
- move.w #0,Movement
- move.w #30,Cooperation
- move.b #0,Ident
- move.l #%1,enemies
- move.l #%10100000,friends
- st Armed
- bsr AIControl
-
- move.l objroom,a2
- move.w 10(a2),2(a0)
- move.l 2(a2),d0
- sub.l #6400,d0
- asr.l #7,d0
- move.w d0,4(a0)
-
- move.l #0,8(a0)
-
- rts
-
- include "ab3:source/aliencontrol.s"
-
- nextCPt: dc.w 0
-
- RipTear: dc.l 256*17*65536
- otherrip: dc.l 256*18*65536
-
- ItsAMediKit:
-
- clr.b worry(a0)
-
- HealFactor EQU 18
- move.b PLR1_StoodInTop,d0
- move.b ObjInTop(a0),d1
- eor.b d1,d0
- bne .NotSameZone
-
- move.w PLR1_xoff,oldx
- move.w PLR1_zoff,oldz
- move.w PLR1_Zone,d7
- move.w 12(a0),d0
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
- move.l ToZoneFloor(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbot
- move.l ToUpperFloor(a1),d0
- .okinbot:
- asr.l #7,d0
- sub.w #16,d0
- move.w d0,4(a0)
-
- cmp.w 12(a0),d7
- bne .NotSameZone
- move.w (a0),d0
- move.l ObjectPoints,a1
- move.w (a1,d0.w*8),newx
- move.w 4(a1,d0.w*8),newz
- move.l #100*100,d2
- bsr CheckHit
- tst.b hitwall
- beq.s .NotPickedUp
-
- move.l PLR1_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.w #4,Samplenum
- move.b #2,chanpick
- clr.b notifplaying
- move.b 1(a0),IDNUM
- movem.l a0/a1/d2/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a1/d2/d6/d7
-
- move.w #-1,12(a0)
- move.w HealFactor(a0),d0
- add.w d0,PLR1_energy
-
- .NotPickedUp:
-
- .NotSameZone:
-
- MEDIPLR2
-
- move.b PLR2_StoodInTop,d0
- move.b ObjInTop(a0),d1
- eor.b d1,d0
- bne .NotSameZone
-
- move.w PLR2_xoff,oldx
- move.w PLR2_zoff,oldz
- move.w PLR2_Zone,d7
- move.w 12(a0),d0
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
- move.l ToZoneFloor(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbot
- move.l ToUpperFloor(a1),d0
- .okinbot:
- asr.l #7,d0
- sub.w #16,d0
- move.w d0,4(a0)
-
- cmp.w 12(a0),d7
- bne .NotSameZone
- move.w (a0),d0
- move.l ObjectPoints,a1
- move.w (a1,d0.w*8),newx
- move.w 4(a1,d0.w*8),newz
- move.l #100*100,d2
- bsr CheckHit
- tst.b hitwall
- beq.s .NotPickedUp
-
- move.l PLR2_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.w #4,Samplenum
- move.b #2,chanpick
- clr.b notifplaying
- move.b 1(a0),IDNUM
- movem.l a0/a1/d2/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a1/d2/d6/d7
-
- move.w #-1,12(a0)
- move.w HealFactor(a0),d0
- add.w d0,PLR2_energy
-
- .NotPickedUp:
-
- .NotSameZone:
-
-
- rts
-
- ItsAnAmmoClip:
-
- clr.b worry(a0)
-
- AmmoType EQU 18
- move.b PLR1_StoodInTop,d0
- move.b ObjInTop(a0),d1
- eor.b d1,d0
- bne .NotSameZone
- move.w PLR1_xoff,oldx
- move.w PLR1_zoff,oldz
- move.w PLR1_Zone,d7
- move.w 12(a0),d0
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
- move.l ToZoneFloor(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbot
- move.l ToUpperFloor(a1),d0
- .okinbot:
- asr.l #7,d0
- sub.w #16,d0
- move.w d0,4(a0)
-
- cmp.w 12(a0),d7
- bne .NotSameZone
- move.w (a0),d0
- move.l ObjectPoints,a1
- move.w (a1,d0.w*8),newx
- move.w 4(a1,d0.w*8),newz
- move.l #100*100,d2
- bsr CheckHit
- tst.b hitwall
- beq.s .NotPickedUp
-
- move.l PLR1_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.w #11,Samplenum
- clr.b notifplaying
- move.b 1(a0),IDNUM
- movem.l a0/a1/d2/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a1/d2/d6/d7
-
- move.w #-1,12(a0)
- move.w AmmoType(a0),d0
- lea PLR1_GunData,a6
- lsl.w #2,d0
- lea (a6,d0.w*8),a6
- moveq #0,d0
- move.b 4(a6),d0
- asl.w #3,d0
- move.w (a6),d1
- add.w d0,d1
- move.w d1,(a6)
-
- .NotPickedUp:
-
- .NotSameZone:
-
- AMMOPLR2:
-
- move.b PLR2_StoodInTop,d0
- move.b ObjInTop(a0),d1
- eor.b d1,d0
- bne .NotSameZone
- move.w PLR2_xoff,oldx
- move.w PLR2_zoff,oldz
- move.w PLR2_Zone,d7
- move.w 12(a0),d0
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
- move.l ToZoneFloor(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbot
- move.l ToUpperFloor(a1),d0
- .okinbot:
- asr.l #7,d0
- sub.w #16,d0
- move.w d0,4(a0)
-
- cmp.w 12(a0),d7
- bne .NotSameZone
- move.w (a0),d0
- move.l ObjectPoints,a1
- move.w (a1,d0.w*8),newx
- move.w 4(a1,d0.w*8),newz
- move.l #100*100,d2
- bsr CheckHit
- tst.b hitwall
- beq.s .NotPickedUp
-
- move.l PLR2_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.w #11,Samplenum
- clr.b notifplaying
- move.b 1(a0),IDNUM
- movem.l a0/a1/d2/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a1/d2/d6/d7
-
- move.w #-1,12(a0)
- move.w AmmoType(a0),d0
- lea PLR2_GunData,a6
- lsl.w #2,d0
- lea (a6,d0.w*8),a6
- moveq #0,d0
- move.b 4(a6),d0
- asl.w #3,d0
- move.w (a6),d1
- add.w d0,d1
- move.w d1,(a6)
-
- .NotPickedUp:
-
- .NotSameZone:
-
-
- rts
-
-
- ItsABigGun:
-
- clr.b worry(a0)
-
- move.b PLR1_StoodInTop,d0
- move.b ObjInTop(a0),d1
- eor.b d1,d0
- bne .NotSameZone
- move.w PLR1_xoff,oldx
- move.w PLR1_zoff,oldz
- move.w PLR1_Zone,d7
- move.w 12(a0),d0
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
- move.l ToZoneFloor(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbot
- move.l ToUpperFloor(a1),d0
- .okinbot:
- asr.l #7,d0
- ; add.w #16,d0
- moveq #0,d1
- move.b 7(a0),d1
- sub.w d1,d0
-
- move.w d0,4(a0)
- cmp.w 12(a0),d7
- bne .NotSameZone
- move.w (a0),d0
- move.l ObjectPoints,a1
- move.w (a1,d0.w*8),newx
- move.w 4(a1,d0.w*8),newz
- move.l #100*100,d2
- bsr CheckHit
- tst.b hitwall
- beq.s .NotPickedUp
-
- move.l PLR1_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.w #4,Samplenum
- move.b #2,chanpick
- clr.b notifplaying
- move.b 1(a0),IDNUM
- movem.l a0/a1/d2/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a1/d2/d6/d7
-
- move.l #Cheese,FacesPtr
- move.w #4,Cheese
- move.w #-1,FacesCounter
- moveq #0,d0
- move.b 17(a0),d0
- lsl.w #2,d0
- move.l #PLR1_GunData+32,a1
- st 7(a1,d0.w*8)
-
- move.w #-1,12(a0)
-
- .NotPickedUp:
-
- .NotSameZone:
-
- GUNPLR2:
-
- move.b PLR2_StoodInTop,d0
- move.b ObjInTop(a0),d1
- eor.b d1,d0
- bne .NotSameZone
- move.w PLR2_xoff,oldx
- move.w PLR2_zoff,oldz
- move.w PLR2_Zone,d7
- move.w 12(a0),d0
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
- move.l ToZoneFloor(a1),d0
- tst.b ObjInTop(a0)
- beq.s .okinbot
- move.l ToUpperFloor(a1),d0
- .okinbot:
- asr.l #7,d0
- ; add.w #16,d0
- moveq #0,d1
- move.b 7(a0),d1
- sub.w d1,d0
-
- move.w d0,4(a0)
- cmp.w 12(a0),d7
- bne .NotSameZone
- move.w (a0),d0
- move.l ObjectPoints,a1
- move.w (a1,d0.w*8),newx
- move.w 4(a1,d0.w*8),newz
- move.l #100*100,d2
- bsr CheckHit
- tst.b hitwall
- beq.s .NotPickedUp
-
- move.l PLR2_Obj,a2
- move.w (a2),d0
- move.l #ObjRotated,a2
- move.l (a2,d0.w*8),Noisex
- move.w #50,Noisevol
- move.w #4,Samplenum
- move.b #2,chanpick
- clr.b notifplaying
- move.b 1(a0),IDNUM
- movem.l a0/a1/d2/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a1/d2/d6/d7
-
- move.l #Cheese,FacesPtr
- move.w #4,Cheese
- move.w #-1,FacesCounter
- moveq #0,d0
- move.b 17(a0),d0
- lsl.w #2,d0
- move.l #PLR2_GunData+32,a1
- st 7(a1,d0.w*8)
-
- move.w #-1,12(a0)
-
- .NotPickedUp:
-
- .NotSameZone:
-
-
- rts
-
- ItsAKey:
-
- clr.b worry(a0)
-
- move.b PLR1_StoodInTop,d0
- move.b ObjInTop(a0),d1
- eor.b d1,d0
- bne .NotSameZone
-
- move.w PLR1_xoff,oldx
- move.w PLR1_zoff,oldz
- move.w PLR1_Zone,d7
- move.w 12(a0),d0
- move.l ZoneAdds,a1
- move.l (a1,d0.w*4),a1
- add.l LEVELDATA,a1
- move.l 2(a1),d0
- asr.l #7,d0
- sub.w #16,d0
- move.w d0,4(a0)
- cmp.w 12(a0),d7
- bne .NotSameZone
- move.w (a0),d0
- move.l ObjectPoints,a1
- move.w (a1,d0.w*8),newx
- move.w 4(a1,d0.w*8),newz
- move.l #100*100,d2
- bsr CheckHit
- tst.b hitwall
- beq .NotPickedUp
-
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #50,Noisevol
- move.w #4,Samplenum
- move.b #2,chanpick
- clr.b notifplaying
- move.b 1(a0),IDNUM
- movem.l a0/a1/d2/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a1/d2/d6/d7
-
- move.w #-1,12(a0)
- move.b 17(a0),d0
- or.b d0,Conditions+1
-
- move.l #PanelKeys,a1
- move.l #Panel+40*8*11+22,a2
-
- moveq #0,d1
- lsr.b #1,d0
- bcs.s .done
- addq #1,d1
- lsr.b #1,d0
- bcs.s .done
- addq #1,d1
- lsr.b #1,d0
- bcs.s .done
- addq #1,d1
- .done
-
- muls #6*22*8,d1
-
- adda.w d1,a1
-
- move.w #22*8-1,d0 ;lines
- .lines:
-
- move.l (a1)+,d1
- or.l d1,(a2)
- move.w (a1)+,d1
- or.w d1,4(a2)
- adda.w #40,a2
-
- dbra d0,.lines
-
-
- .NotPickedUp:
-
- .NotSameZone:
-
- rts
-
- Conditions: dc.l 0
-
- ; Format of animations:
- ; Size (-1 = and of anim) (w)
- ; Address of Frame. (l)
- ; height offset (w)
-
- Bul1Anim:
- dc.w 30*256+30
- dc.w 1,2
- dc.w 0
- dc.w 30*256+30
- dc.w 1,17
- dc.w 0
- dc.w 30*256+30
- dc.w 1,18
- dc.w 0
- dc.w 30*256+30
- dc.w 1,19
- dc.w 0
- dc.l -1
-
- Bul1Pop
- dc.b 25,25
- dc.w 1,6
- dc.w 0
- dc.b 25,25
- dc.w 1,7
- dc.w -4
- dc.b 25,25
- dc.w 1,8
- dc.w -4
- dc.b 25,25
- dc.w 1,9
- dc.w -4
- dc.b 25,25
- dc.w 1,10
- dc.w -4
- dc.b 25,25
- dc.w 1,11
- dc.w -4
- dc.b 25,25
- dc.w 1,12
- dc.w -4
- dc.b 25,25
- dc.w 1,13
- dc.w -4
- dc.b 25,25
- dc.w 1,14
- dc.w -4
- dc.b 25,25
- dc.w 1,15
- dc.w -4
- dc.b 25,25
- dc.w 1,16
- dc.w -4
- dc.l -1
-
- Bul3Anim:
- dc.b 25,25
- dc.w 0,12
- dc.w 0
- dc.b 25,25
- dc.w 0,13
- dc.w 0
- dc.b 25,25
- dc.w 0,14
- dc.w 0
- dc.b 25,25
- dc.w 0,15
- dc.w 0
- dc.l -1
-
- Bul3Pop:
- dc.l -1
-
- Bul2Anim:
- dc.b 25,25
- dc.w 2,0
- dc.w 0
- dc.b 25,25
- dc.w 2,1
- dc.w 0
- dc.b 25,25
- dc.w 2,2
- dc.w 0
- dc.b 25,25
- dc.w 2,3
- dc.w 0
- dc.b 25,25
- dc.w 2,4
- dc.w 0
- dc.b 25,25
- dc.w 2,5
- dc.w 0
- dc.b 25,25
- dc.w 2,6
- dc.w 0
- dc.b 25,25
- dc.w 2,7
- dc.w 0
- dc.w -1
-
-
- Bul2Pop:
- dc.b 25,25
- dc.w 2,8
- dc.w -4
- dc.b 29,29
- dc.w 2,9
- dc.w -4
- dc.b 33,33
- dc.w 2,10
- dc.w -4
- dc.b 37,37
- dc.w 2,11
- dc.w -4
- dc.b 41,41
- dc.w 2,12
- dc.w -4
- dc.b 45,45
- dc.w 2,13
- dc.w -4
- dc.b 49,49
- dc.w 2,14
- dc.w -4
- dc.b 53,53
- dc.w 2,15
- dc.w -4
- dc.b 57,57
- dc.w 2,16
- dc.w -4
- dc.b 61,61
- dc.w 2,17
- dc.w -4
- dc.b 65,65
- dc.w 2,18
- dc.w -4
- dc.b 69,69
- dc.w 2,19
- dc.w -4
- dc.w -1
-
- RockAnim:
- dc.b 16,16
- dc.w 6,0
- dc.w 0
- dc.b 16,16
- dc.w 6,1
- dc.w 0
- dc.b 16,16
- dc.w 6,2
- dc.w 0
- dc.b 16,16
- dc.w 6,3
- dc.w 0
- dc.l -1
-
- RockPop:
- dc.b 64,64
- dc.w 8,0+8
- dc.w 0
- dc.b 72,72
- dc.w 8,1+8
- dc.w 0
- dc.b 80,80
- dc.w 8,2+8
- dc.w 0
- dc.b 88,88
- dc.w 8,3+8
- dc.w 0
- dc.b 96,96
- dc.w 8,4+8
- dc.w 0
- dc.b 104,104
- dc.w 8,5+8
- dc.w 0
- dc.b 112,112
- dc.w 8,6+8
- dc.w 0
- dc.b 120,120
- dc.w 8,7+8
- dc.w 0
- dc.b 120,120
- dc.w 8,8+8
- dc.w 0
- dc.b 120,120
- dc.w 8,9+8
- dc.w 0
- dc.b 120,120
- dc.w 8,10+8
- dc.w 0
- dc.b 120,120
- dc.w 8,11+8
- dc.w 0
- dc.l -1
-
- FlameAnim:
- val SET 5
- REPT 6
- dc.b val,val
- dc.w 1,2
- dc.w 0
- dc.b val+3,val+3
- dc.w 1,17
- dc.w 0
- dc.b val+6,val+6
- dc.w 1,18
- dc.w 0
- dc.b val+9,val+9
- dc.w 1,19
- dc.w 0
- val SET val+12
- ENDR
- dc.l -1
-
- FlamePop:
- dc.b 40,40
- dc.w 1,12
- dc.w -8
- dc.b 40,40
- dc.w 1,13
- dc.w -8
- dc.b 40,40
- dc.w 1,14
- dc.w -8
- dc.b 40,40
- dc.w 1,15
- dc.w -8
- dc.b 40,40
- dc.w 1,16
- dc.w -8
- dc.l -1
-
- Explode1Anim:
- dc.b 25,25
- dc.w 0,16
- dc.w 0
- dc.b 25,25
- dc.w 0,17
- dc.w 0
- dc.b 25,25
- dc.w 0,18
- dc.w 0
- dc.b 25,25
- dc.w 0,19
- dc.w 0
- dc.l -1
-
- Explode1Pop:
- dc.b 20,20
- dc.w 0,16
- dc.w 1
- dc.b 20,20
- dc.w 0,16
- dc.w 1
- dc.b 20,20
- dc.w 0,16
- dc.w 1
- dc.b 20,20
- dc.w 0,16
- dc.w 1
- dc.b 20,20
- dc.w 0,16
- dc.w 1
- dc.b 20,20
- dc.w 0,16
- dc.w 1
- dc.b 20,20
- dc.w 0,16
- dc.w 1
- dc.b 20,20
- dc.w 0,16
- dc.w 1
-
- dc.b 17,17
- dc.w 0,16
- dc.w 1
-
- dc.b 13,13
- dc.w 0,16
- dc.w 1
-
- dc.b 9,9
- dc.w 0,16
- dc.w 1
-
- dc.l -1
-
- Explode2Anim:
- dc.b 20,20
- dc.w 0,20
- dc.w 0
- dc.b 20,20
- dc.w 0,21
- dc.w 0
- dc.b 20,20
- dc.w 0,22
- dc.w 0
- dc.b 20,20
- dc.w 0,23
- dc.w 0
- dc.l -1
-
- Explode2Pop:
- dc.b 20,20
- dc.w 0,20
- dc.w 1
- dc.b 20,20
- dc.w 0,20
- dc.w 1
- dc.b 20,20
- dc.w 0,20
- dc.w 1
- dc.b 20,20
- dc.w 0,20
- dc.w 1
- dc.b 20,20
- dc.w 0,20
- dc.w 1
- dc.b 20,20
- dc.w 0,20
- dc.w 1
- dc.b 20,20
- dc.w 0,20
- dc.w 1
- dc.b 20,20
- dc.w 0,20
- dc.w 1
-
- dc.b 17,17
- dc.w 0,20
- dc.w 1
-
- dc.b 13,13
- dc.w 0,20
- dc.w 1
-
- dc.b 9,9
- dc.w 0,20
- dc.w 1
-
- dc.l -1
-
-
- Explode3Anim:
- dc.b 20,20
- dc.w 0,24
- dc.w 0
- dc.b 20,20
- dc.w 0,25
- dc.w 0
- dc.b 20,20
- dc.w 0,26
- dc.w 0
- dc.b 20,20
- dc.w 0,27
- dc.w 0
- dc.l -1
-
- Explode3Pop:
-
- dc.b 17,17
- dc.w 0,24
- dc.w 1
- dc.b 17,17
- dc.w 0,24
- dc.w 1
- dc.b 17,17
- dc.w 0,24
- dc.w 1
- dc.b 17,17
- dc.w 0,24
- dc.w 1
- dc.b 17,17
- dc.w 0,24
- dc.w 1
- dc.b 17,17
- dc.w 0,24
- dc.w 1
- dc.b 17,17
- dc.w 0,24
- dc.w 1
- dc.b 17,17
- dc.w 0,24
- dc.w 1
-
- dc.b 13,13
- dc.w 0,24
- dc.w 1
-
- dc.b 9,9
- dc.w 0,24
- dc.w 1
-
- dc.l -1
-
- Explode4Anim:
- dc.b 30,30
- dc.w 0,28
- dc.w 0
- dc.b 30,30
- dc.w 0,29
- dc.w 0
- dc.b 30,30
- dc.w 0,30
- dc.w 0
- dc.b 30,30
- dc.w 0,31
- dc.w 0
- dc.l -1
-
- Explode4Pop:
-
- dc.b 20,20
- dc.w 0,28
- dc.w 0
- dc.b 20,20
- dc.w 0,28
- dc.w 1
- dc.b 20,20
- dc.w 0,28
- dc.w 1
- dc.b 20,20
- dc.w 0,28
- dc.w 1
- dc.b 20,20
- dc.w 0,28
- dc.w 1
- dc.b 20,20
- dc.w 0,28
- dc.w 1
- dc.b 20,20
- dc.w 0,28
- dc.w 1
- dc.b 20,20
- dc.w 0,28
- dc.w 1
-
- dc.b 17,17
- dc.w 0,28
- dc.w 1
-
- dc.b 13,13
- dc.w 0,28
- dc.w 1
-
- dc.b 9,9
- dc.w 0,28
- dc.w 1
-
- dc.l -1
-
- BulletSizes:
- dc.w $808
- dc.w $1010
- dc.w $1010
- dc.w $0808
- dc.w $0808
- dc.w 0,0,0,0,0
- ;10
- dc.w 0,0,0,0,0,0,0,0,0,0
- ;20
- dc.w 0,0,0,0,0,0,0,0,0,0
- ;30
- dc.w 0,0,0,0,0,0,0,0,0,0
- ;40
- dc.w 0,0,0,0,0,0,0,0,0,0
- ;50
- dc.w $0808,$0808,$0808,$0808
-
- HitNoises:
- dc.l -1,-1
- dc.w 15,200
- dc.l -1,-1,-1,-1,-1,-1,-1
- dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
- dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
- dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
- dc.l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1
-
- dc.w 13,50,13,50,13,50,13,50
-
- ExplosiveForce:
- dc.w 0,0,200,0,100,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0,0,0,0
- dc.w 0,0,0,0,0,0,0,0,0,0
- dc.w 0,0,0,0
-
- BulletTypes:
- dc.l Bul1Anim,Bul1Pop
- dc.l Bul2Anim,Bul2Pop
- dc.l RockAnim,RockPop
- dc.l FlameAnim,FlamePop
- dc.l Bul1Anim,Bul1Pop
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
-
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
-
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
-
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
-
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
-
- dc.l Explode1Anim,Explode1Pop
- dc.l Explode2Anim,Explode2Pop
- dc.l Explode3Anim,Explode3Pop
- dc.l Explode4Anim,Explode4Pop
-
- tsta: dc.l 0
- timeout: dc.w 0
-
- ItsABullet:
-
- move.b #0,timeout
- move.w 12(a0),d0
- blt doneshot
-
- tst.b shotstatus(a0)
- bne.s noworrylife
-
- moveq #0,d1
- move.w shotlife(a0),d2
- blt.s infinite
- move.b shotsize(a0),d1
- move.l GunData,a1
- lsl.w #2,d1
- move.w 10(a1,d1.w*8),d1
- blt.s infinite
-
- cmp.w d2,d1
- bge.s notdone
-
- st timeout
- bra.s infinite
-
- notdone:
-
- move.w TempFrames,d2
- add.w d2,shotlife(a0)
-
- infinite:
-
- noworrylife:
-
- move.w #0,extlen
- move.b #$ff,awayfromwall
-
- moveq #0,d1
- move.b shotsize(a0),d1
- move.l #BulletSizes,a1
- move.w (a1,d1.w*2),14(a0)
- move.l #BulletTypes,a1
- lea (a1,d1.w*8),a1
- moveq #0,d1
- move.b shotanim(a0),d1
-
- tst.b shotstatus(a0)
- beq.s notpopping
-
- move.l 4(a1),a2
- move.w (a2,d1.w*8),d2
- bge.s notdonepopping
- move.w #-1,12(a0)
- clr.b shotstatus(a0)
- move.b #0,shotanim(a0)
- rts
- notdonepopping:
-
- add.b #1,shotanim(a0)
- move.w d2,6(a0)
- move.l 2(a2,d1.w*8),8(a0)
- move.w 6(a2,d1.w*8),d3
- add.w d3,4(a0)
- ext.l d3
- asl.l #7,d3
- add.l d3,accypos(a0)
- rts
-
- notpopping:
-
- move.l (a1),a2
- add.b #1,shotanim(a0)
- move.w (a2,d1.w*8),d2
- bge.s notdoneanim
-
- move.b #0,shotanim(a0)
- move.w #0,d1
-
- notdoneanim:
-
- move.w (a2,d1.w*8),6(a0)
- move.l 2(a2,d1.w*8),8(a0)
- move.w 6(a2,d1.w*8),d3
- ext.l d3
- asl.l #7,d3
- add.l d3,accypos(a0)
-
-
- move.l ObjectPoints,a1
- move.w (a0),d1
- lea (a1,d1.w*8),a1
- move.l (a1),d2
- move.l d2,oldx
- move.l shotxvel(a0),d3
- move.w d3,d4
- swap d3
- move.w TempFrames(pc),d5
- muls d5,d3
- mulu d5,d4
- swap d3
- clr.w d3
- add.l d4,d3
- add.l d3,d2
- move.l d2,newx
- move.l 4(a1),d2
- move.l d2,oldz
- move.l shotzvel(a0),d3
- move.w d3,d4
- swap d3
- muls d5,d3
- mulu d5,d4
- swap d3
- clr.w d3
- add.l d4,d3
- add.l d3,d2
- move.l d2,newz
- move.l accypos(a0),oldy
-
- move.w shotyvel(a0),d3
- muls TempFrames,d3
- move.w shotgrav(a0),d5
- beq.s nograv
- muls TempFrames,d5
- add.l d5,d3
- move.w shotyvel(a0),d6
- ext.l d6
- add.l d5,d6
- cmp.l #10*256,d6
- blt.s okgrav
- move.l #10*256,d6
- okgrav:
- move.w d6,shotyvel(a0)
- nograv:
- move.l accypos(a0),d4
- add.l d3,d4
-
- move.l d4,accypos(a0)
- move.l d4,newy
- asr.l #7,d4
- move.w d4,4(a0)
-
-
- move.l ZoneAdds,a2
- move.l (a2,d0.w*4),d0
- add.l LEVELDATA,d0
- move.l d0,objroom
- move.b ObjInTop(a0),StoodInTop
- move.w #%0000010000000000,wallflags
- move.l #0,StepUpVal
- move.l #$1000000,StepDownVal
- move.l #10*128,thingheight
- movem.l d0/d7/a0/a1/a2/a4/a5,-(a7)
- jsr MoveObject
- movem.l (a7)+,d0/d7/a0/a1/a2/a4/a5
- move.b StoodInTop,ObjInTop(a0)
-
- tst.b hitwall
- beq .nothitwall
-
- move.l wallhitheight,d4
- move.l d4,accypos(a0)
- asr.l #7,d4
- move.w d4,4(a0)
-
- .hitsomething
- clr.b timeout
- move.b #0,shotanim(a0)
- move.b #1,shotstatus(a0)
-
- movem.l d0-d7/a0-a6,-(a7)
- move.l #HitNoises,a2
- moveq #0,d0
- move.b shotsize(a0),d0
- move.l (a2,d0.w*4),d0
- blt.s .nohitnoise
-
- move.l #ObjRotated,a1
- move.w (a0),d1
- move.l (a1,d1.w*8),Noisex
- move.w d0,Noisevol
- swap d0
- move.w d0,Samplenum
- move.b d1,IDNUM
- jsr MakeSomeNoise
-
- .nohitnoise:
-
- moveq #0,d0
- move.l #ExplosiveForce,a2
- move.b shotsize(a0),d0
- move.w (a2,d0.w*2),d0
- beq.s .noexplosion
-
- move.w newx,Viewerx
- move.w newz,Viewerz
- bsr ComputeBlast
-
- .noexplosion:
-
- movem.l (a7)+,d0-d7/a0-a6
-
- ; bra doneshot
-
- ; rts
-
- .nothitwall:
-
- tst.b timeout
- bne .hitsomething
-
- lab:
-
- move.l objroom,a3
-
- tst.b ObjInTop(a0)
- beq.s .notintop
- adda.w #8,a3
- .notintop:
-
- move.l 6(a3),d0
- cmp.l accypos(a0),d0
- blt .nohitroof
-
- btst #0,shotflags+1(a0)
- beq.s .nobounce
-
- neg.w shotyvel(a0)
- bra.s .nohitroof
-
- .nobounce:
-
- move.b #0,shotanim(a0)
- move.b #1,shotstatus(a0)
-
- movem.l d0-d7/a0-a6,-(a7)
- move.l #HitNoises,a2
- moveq #0,d0
- move.b shotsize(a0),d0
- move.l (a2,d0.w*4),d0
- blt.s .nohitnoise
-
- move.l #ObjRotated,a1
- move.w (a0),d1
- move.l (a1,d1.w*8),Noisex
- move.w d0,Noisevol
- swap d0
- move.w d0,Samplenum
- move.b d1,IDNUM
- jsr MakeSomeNoise
-
- .nohitnoise:
-
- moveq #0,d0
- move.l #ExplosiveForce,a2
- move.b shotsize(a0),d0
- move.w (a2,d0.w*2),d0
- beq.s .noexplosion
-
- move.w newx,Viewerx
- move.w newz,Viewerz
- bsr ComputeBlast
-
- .noexplosion:
-
- movem.l (a7)+,d0-d7/a0-a6
-
- .nohitroof:
- move.l 2(a3),d0
- sub.l accypos(a0),d0
- cmp.l #5*128,d0
- bgt .nohitfloor
-
- btst #0,shotflags+1(a0)
- beq.s .nobounceup
-
- tst.w shotyvel(a0)
- blt .nohitfloor
-
- moveq #0,d0
- move.w shotyvel(a0),d0
- asr.w #1,d0
- neg.w d0
- move.w d0,shotyvel(a0)
- bra.s .nohitfloor
- .nobounceup:
-
-
- move.b #0,shotanim(a0)
- move.b #1,shotstatus(a0)
- movem.l d0-d7/a0-a6,-(a7)
- move.l #HitNoises,a2
- moveq #0,d0
- move.b shotsize(a0),d0
- move.l (a2,d0.w*4),d0
- blt.s .nohitnoise2
-
- move.l #ObjRotated,a1
- move.w (a0),d1
- move.l (a1,d1.w*8),Noisex
- move.w d0,Noisevol
- swap d0
- move.w d0,Samplenum
- move.b d1,IDNUM
- jsr MakeSomeNoise
- .nohitnoise2:
- moveq #0,d0
- move.l #ExplosiveForce,a2
- move.b shotsize(a0),d0
- move.w (a2,d0.w*2),d0
- beq.s .noexplosion2
-
- move.w newx,Viewerx
- move.w newz,Viewerz
- bsr ComputeBlast
-
- .noexplosion2:
- movem.l (a7)+,d0-d7/a0-a6
- .nohitfloor:
-
- move.l objroom,a3
- move.w (a3),12(a0)
- move.l newx,(a1)
- move.l newz,4(a1)
- ************
- * Check if hit a nasty
-
- tst.l EnemyFlags(a0)
- bne.s notasplut
- rts
- notasplut:
-
- move.l ObjectData,a3
- move.l ObjectPoints,a1
- move.w newx,d2
- sub.w oldx,d2
- move.w d2,xdiff
- move.w newz,d1
- sub.w oldz,d1
- move.w d1,zdiff
- move.w d1,d3
- move.w d2,d4
- muls d2,d2
- muls d1,d1
- add.l d1,d2
- beq .oksqr
-
- move.w #31,d0
- .findhigh
- btst d0,d2
- bne .foundhigh
- dbra d0,.findhigh
- .foundhigh
- asr.w #1,d0
- clr.l d3
- bset d0,d3
- move.l d3,d0
-
- move.w d0,d1
- muls d1,d1 ; x*x
- sub.l d2,d1 ; x*x-a
- asr.l #1,d1 ; (x*x-a)/2
- divs d0,d1 ; (x*x-a)/2x
- sub.w d1,d0 ; second approx
- bgt .stillnot0
- move.w #1,d0
- .stillnot0
-
- move.w d0,d1
- muls d1,d1
- sub.l d2,d1
- asr.l #1,d1
- divs d0,d1
- sub.w d1,d0 ; second approx
- bgt .stillnot02
- move.w #1,d0
- .stillnot02
-
- move.w d0,d1
- muls d1,d1
- sub.l d2,d1
- asr.l #1,d1
- divs d0,d1
- sub.w d1,d0 ; second approx
- bgt .stillnot03
- move.w #1,d0
- .stillnot03
-
- .oksqr
- move.w d0,Range
- add.w #40,d0
- muls d0,d0
- move.l d0,sqrnum
-
- .checkloop:
- tst.w (a3)
- blt .checkedall
- tst.w 12(a3)
- blt .notanasty
- move.b 16(a3),d1
- move.l EnemyFlags(a0),d7
- btst d1,d7
- beq .notanasty
- tst.b numlives(a3)
- beq .notanasty
-
- move.w 4(a3),d1
- move.w 4(a0),d2
- sub.w d1,d2
- cmp.w #12+40,d2
- bgt .notanasty
- cmp.w #-12-40,d2
- blt .notanasty
-
-
- move.w (a3),d1
- move.w (a1,d1.w*8),d2
- move.w d2,d4
- move.w 4(a1,d1.w*8),d3
- move.w d3,d5
- sub.w newx,d4
- sub.w oldx,d2
- move.w d2,d6
- sub.w newz,d5
- sub.w oldz,d3
- move.w d3,d7
- muls zdiff,d6
- muls xdiff,d7
- sub.l d7,d6
- bgt.s .pos
- neg.l d6
- .pos:
- divs Range,d6
- cmp.w #50,d6
- bgt .stillgoing
-
- muls d2,d2
- muls d3,d3
- add.l d3,d2
- cmp.l sqrnum,d2
- bgt .stillgoing
- muls d4,d4
- muls d5,d5
- add.l d5,d4
- cmp.l sqrnum,d4
- bgt .stillgoing
-
- move.b shotpower(a0),d6
- add.b d6,damagetaken(a3)
- move.w shotxvel(a0),ImpactX(a3)
- move.w shotzvel(a0),ImpactZ(a3)
- move.b #0,shotanim(a0)
- move.b #1,shotstatus(a0)
-
- movem.l d0-d7/a0-a6,-(a7)
- move.l #HitNoises,a2
- moveq #0,d0
- move.b shotsize(a0),d0
- move.l (a2,d0.w*4),d0
- blt.s .nohitnoise3
-
- move.l #ObjRotated,a1
- move.w (a0),d1
- move.l (a1,d1.w*8),Noisex
- move.w d0,Noisevol
- swap d0
- move.w d0,Samplenum
- move.b d1,IDNUM
- jsr MakeSomeNoise
- .nohitnoise3:
- moveq #0,d0
- move.l #ExplosiveForce,a2
- move.b shotsize(a0),d0
- move.w (a2,d0.w*2),d0
- beq.s .noexplosion3
-
- move.w newx,Viewerx
- move.w newz,Viewerz
- bsr ComputeBlast
-
- .noexplosion3:
- movem.l (a7)+,d0-d7/a0-a6
-
-
- bra .hitnasty
- .stillgoing:
- .notanasty:
- add.w #64,a3
- bra .checkloop
- .hitnasty:
- .checkedall
-
- doneshot:
-
- rts
-
- tmpnewx: dc.l 0
- tmpnewz: dc.l 0
- hithit: dc.l 0
- sqrnum: dc.l 0
- tmpangpos: dc.l 0
-
- putinbackdrop:
-
- move.l a0,-(a7)
-
- move.w tmpangpos,d5
- and.w #8191,d5
- muls #432,d5
- divs #8192,d5
- muls #38*2,d5
-
- CACHE_ON d1
-
- move.l frompt,a0
- adda.w #104*4,a0
- move.l #EndBackPicture,a3
- lea.l BackPicture,a1
- add.l d5,a1
- move.w #2,d4
- bra allbars
- cnop 0,32
- allbars:
- move.w #31,d3
- onebar:
- vertline:
- val SET 0
-
- REPT 19
- move.l (a1)+,d0
- move.w d0,val+104*4(a0)
- swap d0
- move.w d0,val(a0)
- val SET val+104*8
- ENDR
-
- cmp.l a3,a1
- blt.s notoffrightend
- move.l #BackPicture,a1
- notoffrightend:
-
- addq #4,a0
- dbra d3,onebar
- addq #4,a0
- dbra d4,allbars
-
- move.l (a7)+,a0
- rts
-
- ComputeBlast:
-
- move.l #%110111100001,d7 ; possible targets
-
- move.w d0,d6
- move.w d0,d1
- ext.l d6
- asl.l #4,d6
-
- move.w 12(a0),d0
- neg.w d1
- asr.w #5,d1
- bsr Flash
- move.l ZoneAdds,a2
- move.l (a2,d0.w*4),a2
- add.l LEVELDATA,a2
- move.l a2,FromRoom
-
- move.l ObjectData,a2
- suba.w #64,a2
-
- HitObjLoop:
- add.w #64,a2
- move.w (a2),d0
- blt CheckedEmAll
- tst.w 12(a2)
- blt.s HitObjLoop
- moveq #0,d1
- move.b 16(a2),d1
- btst d1,d7
- beq.s HitObjLoop
-
- move.w 12(a2),d1
- move.l ZoneAdds,a3
- move.l (a3,d1.w*4),a3
- add.l LEVELDATA,a3
- move.l a3,ToRoom
- move.l ObjectPoints,a3
- move.w (a3,d0.w*8),Targetx
- move.w 4(a3,d0.w*8),Targetz
- jsr CanItBeSeen
- tst.b CanSee
- beq.s HitObjLoop
-
- move.w Targetx,d0
- sub.w Viewerx,d0
- move.w d0,d2
- move.w Targetz,d1
- sub.w Viewerz,d1
- move.w d1,d3
- muls d2,d2
- muls d3,d3
- add.l d2,d3
- asr.l #6,d3
- tst.w d3
- bne.s OkItsnotzero
- moveq #1,d3
- OkItsnotzero:
-
- cmp.l #32767,d3
- bgt HitObjLoop
-
- move.l d6,d5
- divs d3,d5
- cmp.w #50,d5
- blt.s okdamage
- move.w #50,d5
- okdamage:
- add.b d5,damagetaken(a2)
- ext.l d0
- asl.l #5,d0
- ext.l d1
- asl.l #5,d1
- divs d3,d0
- divs d3,d1
- move.w d0,ImpactX(a2)
- move.w d1,ImpactZ(a2)
-
- bra HitObjLoop
-
- CheckedEmAll:
- rts
-
-
-
-
-
-
-
-